// This script lists all dependencies that have package install scripts
const path = require('path');
const readInstalled = require('read-installed');

const installScripts = ['preinstall', 'install', 'postinstall'];

readInstalled('./', { dev: true }, function (err, data) {
  if (err) {
    throw err;
  }

  const deps = data.dependencies;
  Object.entries(deps).forEach(([packageName, packageData]) => {
    const packageScripts = packageData.scripts || {};
    const scriptKeys = Reflect.ownKeys(packageScripts);

    const hasInstallScript = installScripts.some((installKey) =>
      scriptKeys.includes(installKey),
    );
    if (!hasInstallScript) {
      return;
    }

    const matchingScripts = {};
    if (packageScripts.preinstall) {
      matchingScripts.preinstall = packageScripts.preinstall;
    }
    if (packageScripts.install) {
      matchingScripts.install = packageScripts.install;
    }
    if (packageScripts.postinstall) {
      matchingScripts.postinstall = packageScripts.postinstall;
    }
    const scriptNames = Reflect.ownKeys(matchingScripts);

    const relativePath = path.relative(process.cwd(), packageData.path);

    console.log(`${packageName}: ${relativePath} ${scriptNames}`);
  });
});
